5909
23081
¿Cuál es el método más rápido para convertir un java.nio.ByteBuffer a en un CharBuffer bo char [] b (recién creado).
Al hacer esto, es importante que a [i] == b [i]. Esto significa que no a [i] y a [i + 1] juntos componen un valor b [j], lo que haría getChar (i), pero los valores deberían "distribuirse".
byte a [] = {1,2,3, 125,126,127, -128, -127, -126} // cada byte (que está firmado)
char b [] = {1,2,3, 125,126,127, 128, 129, 130} // cada uno es un char (que no están firmados)
Tenga en cuenta que el byte: -128 tiene los mismos bits (8 inferiores) que char: 128. Por lo tanto, supongo que la "mejor" interpretación sería la que señalé anteriormente, porque los bits son los mismos.
Después de eso, también necesito la traducción viceversa: la forma más eficiente de obtener un char [] o java.nio.CharBuffer de nuevo en un java.nio.ByteBuffer. 
Entonces, lo que desea es convertir usando la codificación ISO-8859-1.
No pretendo nada sobre la eficiencia, pero al menos es bastante breve para escribir:
Resultado de CharBuffer = Charset.forName ("ISO-8859-1"). Decode (byteBuffer);
La otra dirección sería:
Resultado de ByteBuffer = Charset.forName ("ISO-8859-1"). Encode (charBuffer);
Mida esto con otras soluciones. (Para ser justos, la parte Charset.forName no debe incluirse, y también debe hacerse solo una vez, no para cada búfer nuevamente).
Desde Java 7 en adelante, también existe la clase StandardCharsets con instancias de Charset previamente instanciadas, por lo que puede usar
Resultado de CharBuffer = StandardCharsets.ISO_8859_1.decode (byteBuffer);
y
Resultado de ByteBuffer = StandardCharsets.ISO_8859_1.encode (charBuffer);
en lugar. (Estas líneas hacen lo mismo que las anteriores, solo que la búsqueda es más fácil y no hay riesgo de escribir mal los nombres, y no es necesario detectar las excepciones imposibles).
|
Estoy de acuerdo con @ Ishtar, sugiero que evite la conversión a una nueva estructura y solo convierta cuando lo necesite.
Sin embargo, si tiene un ByteBuffer de montón, puede hacerlo.
ByteBuffer bb = ...
byte [] matriz = bb.array ();
char [] chars = new char [bb.remaining ()];
para (int i = 0; i